from PySide2.QtWidgets import QWidget
from D5Core.Details.D5Api import D5Api
from D5Core.D5Tools import ModelList,SceneTool,CameraTool,RenderTool
from PySide2.QtCore import Qt


class D5Plugin(QWidget):
    """
    D5插件的基类，提供与D5Api的交互接口。
    
    该类继承自QWidget，用于创建可在D5环境中显示的插件界面。
    每个插件实例都有唯一的插件ID，并通过D5Api与核心系统通信。
    
    :param plugin_id: 插件的唯一标识符
    :type plugin_id: str
    
    :ivar plugin_id: 插件的唯一标识符
    :vartype plugin_id: str
    :ivar __d5api: 内部使用的D5Api实例
    :vartype __d5api: D5Api
    """
    def __init__(self, plugin_id):
        """
        初始化D5Plugin实例。
        
        :param plugin_id: 插件的唯一标识符
        :type plugin_id: str
        """
        super().__init__()  
        self.__d5api = D5Api()
        #强制绑定工具类在主线程 
        self.__elemlist = ModelList()
        self.__scenetool = SceneTool()
        self.__scenetool.update_scenes()
        self.__cameratool = CameraTool()
        self.__rendertool = RenderTool()

        self.__d5api.registeredQwidget(plugin_id,self)
        self.__d5api.registeredEnableHandle(plugin_id,self.enable)
        # 设置窗口隐藏代替关闭
        self.setAttribute(Qt.WA_DeleteOnClose, False)
        
        self.plugin_id = plugin_id
        

    def enable(self, enable):
        """
        启用或禁用插件。
        
        当启用时，插件窗口将显示；当禁用时，插件窗口将隐藏。
        
        :param enable: 是否启用插件
        :type enable: bool
        """
        self.show() if enable else self.hide()


